package com.tank.game.api;

import com.tank.game.api.event.BulletEvent;
import com.tank.game.api.listener.Listener;

/**
 * 坦克抽象接口
 *
 * @author Zed
 */
public interface Tank extends Destroy, Move<Tank>, BulletCollection {

    /**
     * 坦克编号
     *
     * @return {@link String}
     */
    String getId();

    /**
     * 当前玩家
     * {@link Play},玩家
     */
    Play getPlay();

    /**
     * 坦克面积
     *
     * @return {@link Range}
     */
    Range getRange();

    /**
     * 是否被击中
     *
     * @param bullet {@link Bullet}
     * @return {@link Boolean},true 击中
     */
    boolean isHit(Bullet bullet);

    /**
     * 发射子弹 且回调子弹的事件,
     * 有可能回调击中的坦克
     * {@link Bullet}
     */
    Bullet fireBullet(Listener<BulletEvent> listener);
}
